C语言指向二维数组的四种指针以及动态分配二维数组的五种方式 您所在的位置:网站首页 c 指针定义 C语言指向二维数组的四种指针以及动态分配二维数组的五种方式

C语言指向二维数组的四种指针以及动态分配二维数组的五种方式

2024-07-15 15:12| 来源: 网络整理| 查看: 265

文章目录 应用场景可能指向二维数组的指针动态分配二维数组

应用场景

当二维数组作为结构成员或返回值时,通常需要根据用户传递的参数来决定二维数组的大小,此时就需要动态分配二维数组。

可能指向二维数组的指针

如果现在有一个二维数组a[3][2],那么将有以下几种指针可以指向它:

//第一种:二维数组指针,指向整个二维数组 int (*ptr)[3][2]=&a; //第二种:一维数组指针,指向二维数组第一行元素 int (*ptr)[2]=a;//or &a[0] //第三种:int *型指针,指向二维数组第一行第一列的第一个元素 int *ptr=&a[0][0];//or *a //第四种:int *型指针,指向二维数组第一行元素 int **ptr = calloc(3, sizeof(int *)); for (int i = 0; i //初始化 int (*ptr)[3][2] = calloc(3 * 2, sizeof(int)); //赋值 for (int i = 0; i (*ptr)[i][j]=j; } } //打印 for (int i = 0; i printf("%d", (*ptr)[i][j]); } printf("\n"); } return 0; } 方式二: int main(int argc, char **argv) { //初始化 int (*ptr)[2] = calloc(3 * 2, sizeof(int)); //赋值 for (int i = 0; i *(ptr[i]+j)= j; } } //打印 for (int i = 0; i printf("%d", *(ptr[i]+j)); } printf("\n"); } return 0; }

在应用场景中通常采用以下三种方式动态分配二维数组,因为这两种方式在声明二维数组时不需要知道二维数组的大小:

方式三 int main(int argc, char **argv) { //初始化 int *a = calloc(2 * 3, sizeof(int)); //赋值 for (int i=0;i *(a+2*(i-1)+j)=j; } } //打印 for (int i=0;i printf("%d",*(a+2*(i-1)+j)); } printf("\n"); } return 0; }

在这里插入图片描述

方式四:使用此方式时有一些限制,因为以此方式分配的二维数组在内存上不连续 int main(int argc, char **argv) { //初始化 int **ptr = calloc(3, sizeof(int *)); for (int i = 0; i for (int j = 0; j for (int j = 0; j //初始化 int **ptr = calloc(3, sizeof(int *)); *ptr = calloc(3 * 2, sizeof(int)); for (int i = 1; i for (int j = 0; j for (int j = 0; j


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有